package MallSecret

import (
	CoreFilter "gitee.com/fotomxq/weeekj_core/v5/core/filter"
	CoreLog "gitee.com/fotomxq/weeekj_core/v5/core/log"
)

// 处理结束秒杀时间的商品
func runSecond() {
	// 捕捉异常
	defer func() {
		if r := recover(); r != nil {
			CoreLog.Error("early warning run, ", r)
		}
	}()
	// 处理数据查询所有未开始和进行中的秒杀商品
	dataList, _, err := GetSecondListAll()
	if err != nil {
		CoreLog.Error("get second product list error, ", err)
		return // 如果获取商品列表失败，直接返回，避免后续操作
	}
	now := CoreFilter.GetNowTime().Unix() // 获取当前时间戳，避免多次计算
	// 循环处理每个商品
	for _, v := range dataList {
		switch v.Status {
		case 0:
			// 解析开始时间和结束时间
			startTime := CoreFilter.GetTimeByDefaultNoErr(v.StartTime)
			endTime := CoreFilter.GetTimeByDefaultNoErr(v.EndTime)
			// 判断是否到达秒杀开始 开始时间小于等于现在时 结束时间大于现在
			if startTime.Unix() <= now && endTime.Unix() > now {
				err = UpdateSecondStatus(&ArgsUpdateSecondStatus{
					ID:     v.ID,
					Status: 1,
				})
				if err != nil {
					CoreLog.Error("update second product error, ", err)
				}
			}
		case 1:
			// 解析结束时间
			endTime := CoreFilter.GetTimeByDefaultNoErr(v.EndTime)
			// 判断是否到达秒杀结束 结束时间小于等于当前时间
			if endTime.Unix() <= now {
				err = UpdateSecondStatus(&ArgsUpdateSecondStatus{
					ID:     v.ID,
					Status: 2,
				})
				if err != nil {
					CoreLog.Error("update second product error, ", err)
				}
				// 将秒杀商品复原
				err = UpdateProductMallBySecond(&ArgsUpdateMallBySecond{
					ID:           v.ProductID,
					IsSecondMall: false,
				})
				if err != nil {
					CoreLog.Error("update mall product error, ", err)
				}
			}
		}
	}
}
